<?php

require_once "Servicios.php";

/**
 * Description of GabineteServicios
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class GabineteServicios extends Servicios
{

  function agregar(GabineteDTO $gabineteDTO)
  {
    $repoGabinete = new RepoGabinete();
    $gabinete = $this->deDTO($gabineteDTO);
    $gabinete->setUsuario($this->ObtenerNombreUsuarioSesion());
    return $repoGabinete->agregar($gabinete);
  }

  function modificar(GabineteDTO $gabineteDTO)
  {
    $repoGabinete = new RepoGabinete();
    $gabinete = $this->deDTO($gabineteDTO);
    $gabinete->setUsuario($this->ObtenerNombreUsuarioSesion());
    return $repoGabinete->modificar($gabinete);
  }

  function eliminar($id)
  {
    $repoGabinete = new RepoGabinete();
    return $repoGabinete->eliminar($id);
  }

  function listar()
  {
    $repoGabinete = new RepoGabinete();
    $gabinetes = $repoGabinete->listar();
    $gabinetesDTO = null;
    if (count($gabinetes) > 0)
    {
      foreach ($gabinetes as $gabinete)
      {
        $gabineteDTO = new GabineteDTO();
        $gabineteDTO->setDescripcion($gabinete->descripcion);
        $gabineteDTO->setDeshabilitado($gabinete->deshabilitado);
        $gabineteDTO->setId($gabinete->idGabinete);
        $gabineteDTO->setNombre($gabinete->nombre);
        $gabineteDTO->setTamano($gabinete->dimension);
        $gabinetesDTO[] = $gabineteDTO;
      }
    }
    return $gabinetesDTO;
  }

  function listarHabilitados()
  {
    $repoGabinete = new RepoGabinete();
    $gabinetes = $repoGabinete->listarHabilitados();
    $gabinetesDTO = "";
    if ($gabinetes != null)
    {
      foreach ($gabinetes as $gabinete)
      {
        $gabinetesDTO[] = $this->aDTO($gabinete);
      }
    }
    return $gabinetesDTO;
  }
  function listarNoBloqueados($fecha, $hora)
  {    
    $repoGabinete = new RepoGabinete();
    $gabinetes = $repoGabinete->listarNoBloqueados($fecha, $hora);
    $gabinetesDTO = "";
    if ($gabinetes != null)
    {
      foreach ($gabinetes as $gabinete)
      {
        $gabinetesDTO[] = $this->aDTO($gabinete);
      }
    }
    return $gabinetesDTO;
  }

  function listarKeyValuesHabilitados()
  {
    $gabinetes = $this->listarHabilitados();
    if ($gabinetes != null && count($gabinetes) > 0)
    {
      for ($i = 0; $i < count($gabinetes); $i++)
      {
        $resultado[$i]["key"] = $gabinetes[$i]->getId();
        $resultado[$i]["value"] = $gabinetes[$i]->getNombre();
      }
    } else
    {
      $resultado[0]["key"] = "";
      $resultado[0]["value"] = "";
    }
    return $resultado;
  }
  function listarKeyValues()
  {
    $gabinetes = $this->listar();
    if ($gabinetes != null && count($gabinetes) > 0)
    {
      for ($i = 0; $i < count($gabinetes); $i++)
      {
        $resultado[$i]["key"] = $gabinetes[$i]->getId();
        $resultado[$i]["value"] = $gabinetes[$i]->getNombre();
      }
    } else
    {
      $resultado[0]["key"] = "";
      $resultado[0]["value"] = "";
    }
    return $resultado;
  }

  function listarIdName()
  {
    $resultado = "";
    $gabinetes = $this->listarHabilitados();
    if ($gabinetes != null)
    {
      for ($i = 0; $i < count($gabinetes); $i++)
      {
        $resultado[$i]["id"] = $gabinetes[$i]->getId();
        $resultado[$i]["name"] = $gabinetes[$i]->getNombre();
      }
    } else
    {
      $resultado[0]["id"] = "";
      $resultado[0]["name"] = "";
    }
    return $resultado;
  }

  function buscar($id)
  {
    $repoGabinete = new RepoGabinete();
    return $this->aDTO($repoGabinete->buscar($id));
  }

  function buscarGabinete($id)
  {
    $repoGabinete = new RepoGabinete();
    return $repoGabinete->buscar($id);
  }

  function validarDisponibilidad($fecha, $hora, $gabinete)
  {
    $repoGabinete = new RepoGabinete();
    return $repoGabinete->validarDisponibilidad($fecha, $hora, $gabinete);
  }

  function validarDisponibilidadSinReservaActual($fecha, $hora, $gabinete, $reserva)
  {
    $repoGabinete = new RepoGabinete();
    return $repoGabinete->validarDisponibilidadSinReservaActual($fecha, $hora, $gabinete, $reserva);
  }
  
  function estaBloqueado($fecha, $hora, $gabinete){
      $repoGabinete = new RepoGabinete();
      return $repoGabinete->estaBloqueado($fecha, $hora, $gabinete);
  }

  function aDTO(Gabinete $gabinete)
  {
    $gabineteDTO = new GabineteDTO();
    $gabineteDTO->setDescripcion($gabinete->getDescripcion());
    $gabineteDTO->setNombre($gabinete->getNombre());
    $gabineteDTO->setTamano($gabinete->getDimension());
    $gabineteDTO->setDeshabilitado($gabinete->getDeshabilitado());
    $gabineteDTO->setId($gabinete->getId());
    $gabineteDTO->setVersion($gabinete->getVersion());
    $gabineteDTO->setUsuario($gabinete->getUsuario());
    return $gabineteDTO;
  }

  function deDTO(GabineteDTO $gabineteDTO)
  {
    $gabinete = new Gabinete();
    $gabinete->setDescripcion($gabineteDTO->getDescripcion());
    $gabinete->setNombre($gabineteDTO->getNombre());
    $gabinete->setDimension($gabineteDTO->getTamano());
    $gabinete->setDeshabilitado($gabineteDTO->getDeshabilitado());
    $gabinete->setId($gabineteDTO->getId());
    $gabinete->setVersion($gabineteDTO->getVersion());
    $gabinete->setUsuario($gabineteDTO->getUsuario());
    return $gabinete;
  }

}

?>
